home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / lang_asm / assign / assign.dsm < prev    next >
Text File  |  1992-08-06  |  18KB  |  642 lines

  1. ;        Disassembly of file :C:\ASSIGN.COM
  2. ;
  3. ;        Define common ASCII control codes.
  4. ;
  5. HT       EQU   9
  6. LF       EQU   10
  7. FF       EQU   12
  8. CR       EQU   13
  9. EOF      EQU   26
  10. ;
  11. ;        Define MSDOS/PCDOS functions.
  12. ;
  13. _OUTSTR  EQU   9
  14. _SELDISK EQU   14
  15. _GETDISK EQU   25
  16. _GETVER  EQU   48
  17. _EXIT    EQU   76
  18. ;
  19. ;      Macro to generate MSDOS/PCDOS calls.
  20. ;
  21. MSDOS    MACRO  name
  22.          IFDEF  &name
  23.          MOV    AH,&name
  24.          ENDIF
  25.          INT    21H
  26.          ENDM
  27. ;
  28. ;
  29. ;
  30. Code_Seg SEGMENT PUBLIC
  31. ;
  32.          ASSUME CS:Code_Seg,DS:Code_Seg
  33.          ORG  02CH
  34. ENV_SEG  DW   ?
  35.          ORG  080H
  36. TAIL_LEN DW   ?
  37. ;
  38.          ORG   00100H
  39. L0100H:  JMP   L056DH  
  40. L0103H:  DB    1,2,3,4,5,6
  41.          DB    7,8,9,0AH,0BH,0CH
  42.          DB    0DH,0EH,0FH,10H,11H,12H
  43.          DB    13H,14H,15H,16H,17H,18H
  44.          DB    19H,1AH
  45. L011DH:  DB    0
  46. L011EH:  DB    0
  47. L011FH:  DB    0,0
  48. L0121H:  DB    0
  49. L0122H:  DW    0
  50. L0124H:  DW    0
  51. L0126H:  DW    0
  52. L0128H:  DW    0
  53. L012AH:  DW    0
  54. L012CH:  DW    0
  55. L012EH:  DW    0
  56. L0130H:  DW    0
  57. L0132H:  DW    0
  58. L0134H:  DW    0
  59. L0136H:  DW    0
  60. L0138H:  DB    0
  61. ;
  62. ;                     JUMP TABLE
  63. ;
  64. L0139H:
  65.          DW    0236H,0239H,0239H                       ;0,1,2
  66.          DW    0239H,0239H,0239H                       ;3
  67.          DW    0239H,0239H,0239H                       ;6
  68.          DW    0239H,0239H,0239H                       ;9
  69.          DW    0239H,0236H,047EH                       ;CH,DH,EH
  70.          DW    0240H,0240H,0240H                       ;FH,10H,11H
  71.          DW    0240H,0240H,0240H                       ;
  72.          DW    0240H,0240H,0240H
  73.          DW    0236H,046DH,0236H
  74.          DW    0236H,02EBH,0236H
  75.          DW    0236H,0236H,0236H
  76.          DW    0240H,0240H,0240H
  77.          DW    0240H,0236H,0236H
  78.          DW    0240H,0240H,0236H
  79.          DW    0236H,0236H,0236H
  80.          DW    0236H,0236H,0236H
  81.          DW    0236H,0236H,02EBH
  82.          DW    0236H,0236H,0236H
  83.          DW    02EBH,0236H,0236H
  84.          DW    029BH,029BH,029BH
  85.          DW    029BH,029BH,0236H
  86.          DW    0236H,0236H,029BH
  87.          DW    0236H,029BH,0340H
  88.          DW    0236H,0236H,02EBH
  89.          DW    0236H,0236H,0236H
  90.          DW    0398H,0236H,0236H
  91.          DW    029BH,0236H,0236H
  92.          DW    0236H,0236H,0236H
  93.          DW    0236H,0236H,0405H
  94.          DW    0236H,0236H,0236H
  95.          DW    029BH,029BH,0236H
  96.          DW    0236H,0236H,0236H
  97.          DW    03B5H,0236H,0236H                        ;5EH,5FH,60H
  98.          DW    0236H                                    ;61H
  99. ;
  100. ;          INTERRUPT 21H HERE .....
  101. ;
  102. L0201H:  MOV   WORD PTR CS:[L0136H],0200H
  103.          PUSH  AX
  104.          PUSH  BX
  105.          CMP   AH,63H
  106.          JA    L0239H  
  107.          MOV   AL,AH
  108.          CBW                     ;Convert byte (AL) to word (AX).
  109.          SHL   AX,1
  110.          MOV   BX,AX
  111.          JMP   WORD PTR CS:[BX]+0139H
  112. ;
  113. L021BH:  CALL  L022EH  
  114.          PUSH  AX
  115.          MOV   AX,8008H
  116.          INT   2AH
  117.          POP   AX
  118.          RET
  119. ;
  120. L0226H:  PUSH  AX
  121.          MOV   AX,8108H
  122.          INT   2AH
  123.          POP   AX
  124.          RET
  125. ;
  126. L022EH:  PUSH  AX
  127.          MOV   AX,8908H
  128.          INT   2AH
  129.          POP   AX
  130.          RET
  131. L0236H:
  132.          CALL  L022EH  
  133. L0239H:
  134.          POP   BX
  135.          POP   AX
  136.          JMP   CS:DWORD PTR [L0122H]
  137. L0240H:
  138.          MOV   BX,DX
  139.          MOV   AL,BYTE PTR [BX]
  140.          CMP   AL,0FFH
  141.          JNZ   L024DH  
  142.          ADD   BX,7
  143.          MOV   AL,BYTE PTR [BX]
  144. L024DH:  OR    AL,AL
  145.          JNZ   L0255H  
  146.          MOV   AL,BYTE PTR CS:[L011DH]
  147. L0255H:  CALL  L021BH  
  148.          MOV   BYTE PTR CS:[L011EH],AL
  149.          CALL  L04ECH  
  150.          MOV   BYTE PTR [BX],AL
  151.          MOV   WORD PTR CS:[L011FH],BX
  152.          POP   BX
  153.          POP   AX
  154.          POP   WORD PTR CS:[L0132H]
  155.          POP   WORD PTR CS:[L0134H]
  156.          CALL  L04C0H  
  157.          CALL  CS:DWORD PTR [L0122H]
  158.          PUSHF                   ;Push flag register.
  159.          CALL  L04D4H  
  160.          PUSH  AX
  161.          PUSH  BX
  162.          MOV   BX,WORD PTR CS:[L011FH]
  163.          MOV   AL,BYTE PTR CS:[L011EH]
  164.          MOV   BYTE PTR [BX],AL
  165.          POP   BX
  166.          POP   AX
  167.          PUSH  WORD PTR CS:[L0134H]
  168.          PUSH  WORD PTR CS:[L0132H]
  169.          CALL  L0226H  
  170.          IRET                    ;Return from interupt.
  171. L029BH:
  172.          MOV   BX,DX
  173.          CMP   BYTE PTR [BX]+1,':'
  174.          JNZ   L0239H  
  175.          MOV   AL,BYTE PTR [BX]
  176.          CALL  L021BH  
  177.          MOV   BYTE PTR CS:[L011EH],AL
  178.          CALL  L050EH  
  179.          MOV   BYTE PTR [BX],AL
  180.          MOV   WORD PTR CS:[L011FH],BX
  181.          POP   BX
  182.          POP   AX
  183.          POP   WORD PTR CS:[L0132H]
  184.          POP   WORD PTR CS:[L0134H]
  185.          CALL  L04C0H  
  186.          CALL  CS:DWORD PTR [L0122H]
  187.          PUSHF                   ;Push flag register.
  188.          CALL  L04D4H  
  189.          PUSH  AX
  190.          PUSH  BX
  191.          MOV   BX,WORD PTR CS:[L011FH]
  192.          MOV   AL,BYTE PTR CS:[L011EH]
  193.          MOV   BYTE PTR [BX],AL
  194.          POP   BX
  195.          POP   AX
  196.          PUSH  WORD PTR CS:[L0134H]
  197.          PUSH  WORD PTR CS:[L0132H]
  198.          CALL  L0226H  
  199.          IRET                    ;Return from interupt.
  200. L02EBH:
  201.          OR    DL,DL
  202.          JZ    L033DH  
  203.          MOV   AL,DL
  204.          CALL  L021BH  
  205.          MOV   BYTE PTR CS:[L011EH],AL
  206.          CALL  L04ECH  
  207.          MOV   DL,AL
  208.          POP   BX
  209.          POP   AX
  210.          MOV   BYTE PTR CS:[L0138H],AH
  211.          POP   WORD PTR CS:[L0132H]
  212.          POP   WORD PTR CS:[L0134H]
  213.          CALL  L04C0H  
  214.          CALL  CS:DWORD PTR [L0122H]
  215.          PUSHF                   ;Push flag register.
  216.          CALL  L04D4H  
  217.          CMP   BYTE PTR CS:[L0138H],'6'
  218.          JZ    L032FH  
  219.          CMP   BYTE PTR CS:[L0138H],1CH
  220.          JZ    L032FH  
  221.          MOV   DL,BYTE PTR CS:[L011EH]
  222. L032FH:  PUSH  WORD PTR CS:[L0134H]
  223.          PUSH  WORD PTR CS:[L0132H]
  224.          CALL  L0226H  
  225.          IRET                    ;Return from interupt.
  226. L033DH:  JMP   L0239H  
  227.          POP   BX
  228.          POP   AX
  229.          PUSH  AX
  230.          PUSH  BX
  231.          CMP   AX,4404H
  232.          JZ    L0358H  
  233.          CMP   AX,4405H
  234.          JZ    L0358H  
  235.          CMP   AX,4408H
  236.          JZ    L0358H  
  237.          CMP   AX,4409H
  238.          JNZ   L0395H  
  239. L0358H:  OR    BX,BX
  240.          JZ    L0395H  
  241.          MOV   AL,BL
  242.          CALL  L021BH  
  243.          MOV   BYTE PTR CS:[L011EH],AL
  244.          CALL  L04ECH  
  245.          MOV   BL,AL
  246.          POP   AX
  247.          POP   AX
  248.          POP   WORD PTR CS:[L0132H]
  249.          POP   WORD PTR CS:[L0134H]
  250.          CALL  L04C0H  
  251.          CALL  CS:DWORD PTR [L0122H]
  252.          PUSHF                   ;Push flag register.
  253.          CALL  L04D4H  
  254.          MOV   BL,BYTE PTR CS:[L011EH]
  255.          PUSH  WORD PTR CS:[L0134H]
  256.          PUSH  WORD PTR CS:[L0132H]
  257.          CALL  L0226H  
  258.          IRET                    ;Return from interupt.
  259. L0395H:  JMP   L0239H  
  260.          POP   BX
  261.          POP   AX
  262.          PUSH  AX
  263.          PUSH  BX
  264.          OR    AL,AL
  265.          JNZ   L03B2H  
  266.          MOV   BX,DX
  267.          CMP   BYTE PTR [BX]+1,':'
  268.          JNZ   L03AFH  
  269.          MOV   AL,BYTE PTR [BX]
  270.          CALL  L050EH  
  271.          MOV   BYTE PTR [BX],AL
  272. L03AFH:  JMP   L0239H  
  273. L03B2H:  JMP   L029BH  
  274. L03B5H:
  275.          MOV   BX,SI
  276.          CMP   BYTE PTR [BX]+1,':'
  277.          JNZ   L03AFH  
  278.          MOV   AL,BYTE PTR [BX]
  279.          CALL  L021BH  
  280.          MOV   BYTE PTR CS:[L011EH],AL
  281.          CALL  L050EH  
  282.          MOV   BYTE PTR [BX],AL
  283.          MOV   WORD PTR CS:[L011FH],BX
  284.          POP   BX
  285.          POP   AX
  286.          POP   WORD PTR CS:[L0132H]
  287.          POP   WORD PTR CS:[L0134H]
  288.          CALL  L04C0H  
  289.          CALL  CS:DWORD PTR [L0122H]
  290.          PUSHF                   ;Push flag register.
  291.          CALL  L04D4H  
  292.          PUSH  AX
  293.          PUSH  BX
  294.          MOV   BX,WORD PTR CS:[L011FH]
  295.          MOV   AL,BYTE PTR CS:[L011EH]
  296.          MOV   BYTE PTR [BX],AL
  297.          POP   BX
  298.          POP   AX
  299.          PUSH  WORD PTR CS:[L0134H]
  300.          PUSH  WORD PTR CS:[L0132H]
  301.          CALL  L0226H  
  302.          IRET                    ;Return from interupt.
  303. L0405H:
  304.          MOV   BX,DX
  305.          MOV   AX,WORD PTR [BX]
  306.          CALL  L021BH  
  307.          MOV   BYTE PTR CS:[L011EH],AL
  308.          MOV   WORD PTR CS:[L011FH],BX
  309.          CMP   AH,':'
  310.          JNZ   L041FH  
  311.          CALL  L050EH  
  312.          MOV   BYTE PTR [BX],AL
  313. L041FH:  MOV   AX,WORD PTR ES:[DI]
  314.          MOV   BYTE PTR CS:[L0121H],AL
  315.          CMP   AH,':'
  316.          JNZ   L0431H  
  317.          CALL  L050EH  
  318.          MOV   BYTE PTR ES:[DI],AL
  319. L0431H:  POP   BX
  320.          POP   AX
  321.          POP   WORD PTR CS:[L0132H]
  322.          POP   WORD PTR CS:[L0134H]
  323.          CALL  L04C0H  
  324.          CALL  CS:DWORD PTR [L0122H]
  325.          PUSHF                   ;Push flag register.
  326.          CALL  L04D4H  
  327.          PUSH  AX
  328.          PUSH  BX
  329.          MOV   AL,BYTE PTR CS:[L0121H]
  330.          MOV   BYTE PTR ES:[DI],AL
  331.          MOV   BX,WORD PTR CS:[L011FH]
  332.          MOV   AL,BYTE PTR CS:[L011EH]
  333.          MOV   BYTE PTR [BX],AL
  334.          POP   BX
  335.          POP   AX
  336.          PUSH  WORD PTR CS:[L0134H]
  337.          PUSH  WORD PTR CS:[L0132H]
  338.          CALL  L0226H  
  339.          IRET                    ;Return from interupt.
  340.          CALL  L054DH  
  341.          JZ    L047BH  
  342.          POP   BX
  343.          POP   AX
  344.          MOV   AL,BYTE PTR CS:[L011DH]
  345.          DEC   AL
  346.          IRET                    ;Return from interupt.
  347. L047BH:  JMP   L0239H  
  348. L047EH:
  349.          POP   BX
  350.          POP   AX
  351.          MOV   AL,DL
  352.          INC   AL
  353.          CALL  L021BH                                  ; DO INT 2AH
  354.          MOV   BYTE PTR CS:[L011EH],AL
  355.          CALL  L04ECH  
  356.          DEC   AL
  357.          MOV   DL,AL
  358.          MOV   BYTE PTR CS:[L0121H],AL
  359.          PUSHF                   ;Push flag register.
  360.          CALL  CS:DWORD PTR [L0122H]
  361.          PUSH  AX
  362.          MOV   AH,19H
  363.          PUSHF                   ;Push flag register.
  364.          CALL  CS:DWORD PTR [L0122H]
  365.          MOV   DL,BYTE PTR CS:[L011EH]
  366.          DEC   DL
  367.          CMP   AL,BYTE PTR CS:[L0121H]
  368.          JNZ   L04BBH  
  369.          MOV   AL,BYTE PTR CS:[L011EH]
  370.          MOV   BYTE PTR CS:[L011DH],AL
  371. L04BBH:  POP   AX
  372.          CALL  L0226H  
  373.          IRET                    ;Return from interupt.
  374. ;
  375. L04C0H:  PUSH  AX
  376.          PUSH  BP
  377.          MOV   BP,SP
  378.          MOV   AX,WORD PTR [BP]+6
  379.          AND   WORD PTR CS:[L0136H],AX
  380.          AND   WORD PTR [BP]+6,0FDFFH
  381.          POP   BP
  382.          POP   AX
  383.          RET
  384. ;
  385. L04D4H:  PUSH  AX
  386.          PUSH  BP
  387.          MOV   BP,SP
  388.          MOV   AX,WORD PTR CS:[L0136H]
  389.          OR    WORD PTR [BP]+6,AX
  390.          POP   BP
  391.          POP   AX
  392.          RET
  393. ;
  394. L04E2H:  INC   AL
  395.          JZ    L04E9H  
  396.          CALL  L04ECH  
  397. L04E9H:  DEC   AL
  398.          RET
  399. ;
  400. L04ECH:  CMP   AL,1AH
  401.          JA    L050DH  
  402.          CMP   AL,0
  403.          JNZ   L04FCH  
  404.          MOV   AL,BYTE PTR CS:[L011DH]
  405.          MOV   BYTE PTR CS:[L011EH],AL
  406. L04FCH:  PUSH  BX
  407.          PUSH  CX
  408.          MOV   CH,AH
  409.          CBW                     ;Convert byte (AL) to word (AX).
  410.          MOV   BX,0102H
  411.          ADD   BX,AX
  412.          MOV   AL,BYTE PTR CS:[BX]
  413.          MOV   AH,CH
  414.          POP   CX
  415.          POP   BX
  416. L050DH:  RET
  417. ;
  418. L050EH:  CMP   AL,'A'
  419.          JC    L0527H  
  420.          CMP   AL,'Z'
  421.          JBE   L051EH  
  422.          CMP   AL,'a'
  423.          JC    L0527H  
  424.          CMP   AL,'z'
  425.          JA    L0527H  
  426. L051EH:  OR    AL,20H
  427.          SUB   AL,60H
  428.          CALL  L04ECH  
  429.          ADD   AL,40H
  430. L0527H:  RET
  431. ;
  432. ;          INTERRUPT 25H
  433. ;
  434. L0528H:  CALL  L04E2H  
  435.          JMP   CS:DWORD PTR [L0126H]
  436. ;
  437. ;          INTERRUPT  26H
  438. ;
  439. L0530H:  CALL  L04E2H  
  440.          JMP   CS:DWORD PTR [L012AH]
  441. ;
  442. ;          INTERRUPT 2FH
  443. ;
  444. L0538H:  CMP   AH,6
  445.          JZ    L0542H  
  446.          JMP   CS:DWORD PTR [L012EH]
  447. L0542H:  CMP   AL,1
  448.          JC    L054AH  
  449.          JNZ   L054CH  
  450.          PUSH  CS
  451.          POP   ES
  452. L054AH:  MOV   AL,0FFH
  453. L054CH:  IRET                    ;Return from interupt.
  454. ;
  455. ;
  456. ;
  457. L054DH:  PUSH  SI
  458.          PUSH  AX
  459.          PUSH  CX
  460.          XOR   AX,AX
  461.          MOV   SI,AX
  462.          MOV   CX,001AH
  463. L0557H:  MOV   AL,BYTE PTR CS:[SI]+0103H
  464.          INC   SI
  465.          CMP   AX,SI
  466.          JNZ   L0565H  
  467.          LOOP  L0557H            ;Dec CX, loop if CX<>0.
  468.          XOR   AX,AX
  469. L0565H:  POP   CX
  470.          POP   AX
  471.          POP   SI
  472.          RET
  473. L0569H:  DW    0000H
  474. L056BH:  DW    0000H
  475. ;
  476. ;                     INIT PROGRAMM
  477. ;
  478. L056DH:
  479.          MSDOS _GETVER           ;Get DOS version number.
  480.          CMP   AX,1F03H
  481.          JZ    L0581H  
  482.          MOV   DX,OFFSET L06E2H
  483.          MSDOS _OUTSTR       ;Display string at (DS:DX).
  484.          MSDOS _EXIT         ;Terminate a process.
  485. L0581H:  MOV   AX,WORD PTR ENV_SEG
  486.          OR    AX,AX
  487.          JZ    L0590H  
  488.          PUSH  ES
  489.          MOV   ES,AX
  490.          MOV   AH,49H
  491.          MSDOS           ;Free allocated memory.
  492.          POP   ES
  493. L0590H:  MOV   AH,52H
  494.          MSDOS
  495.          MOV   WORD PTR [L0569H],BX
  496.          MOV   WORD PTR [L056BH],ES
  497.          PUSH  DS
  498.          POP   ES
  499.          CLD                     ;Set forward direction flag.
  500.          MOV   SI,offset tail_len
  501.          LODSB                   ;Load AL with byt at (SI)+-.
  502.          OR    AL,AL
  503.          JZ    L05D8H  
  504. L05A7H:  LODSB                   ;Load AL with byt at (SI)+-.
  505.          CMP   AL,CR
  506.          JZ    L05D8H  
  507.          CALL  L0671H  
  508.          JZ    L05A7H  
  509.          CALL  L068CH  
  510.          CBW                     ;Convert byte (AL) to word (AX).
  511.          MOV   BX,0102H
  512.          ADD   BX,AX
  513.          LODSB                   ;Load AL with byt at (SI)+-.
  514.          CMP   AL,CR
  515.          JZ    L05C4H  
  516.          CALL  L0671H  
  517.          JZ    L05C7H  
  518. L05C4H:  JMP   L06BAH  
  519. L05C7H:  LODSB                   ;Load AL with byt at (SI)+-.
  520.          CMP   AL,CR
  521.          JZ    L05C4H  
  522.          CALL  L0671H  
  523.          JZ    L05C7H  
  524.          CALL  L068CH  
  525.          MOV   BYTE PTR [BX],AL
  526.          JMP   L05A7H
  527. L05D8H:  MOV   AX,3525H  ;Get interupt vector.
  528.          MSDOS
  529.          MOV   WORD PTR [L0126H],BX
  530.          MOV   WORD PTR [L0128H],ES
  531.          MOV   AX,3526H  ;Get interupt vector.
  532.          MSDOS
  533.          MOV   WORD PTR [L012AH],BX
  534.          MOV   WORD PTR [L012CH],ES
  535.          MOV   AX,352FH  ;Get interupt vector.
  536.          MSDOS
  537.          MOV   WORD PTR [L012EH],BX
  538.          MOV   WORD PTR [L0130H],ES
  539.          MOV   AX,3521H  ;Get interupt vector.
  540.          MSDOS
  541.          MOV   WORD PTR [L0122H],BX
  542.          MOV   WORD PTR [L0124H],ES
  543.          MOV   AX,0600H
  544.          INT   2FH
  545.          OR    AL,AL
  546.          JZ    L0636H
  547.          MOV   AH,19H
  548.          MSDOS           ;Get current disk into (AL).
  549.          PUSH  AX
  550.          MOV   AX,0601H
  551.          INT   2FH
  552.          MOV   SI,OFFSET L0103H
  553.          MOV   DI,SI
  554.          MOV   CX,001AH
  555.          CLI                     ;Disable interupts.
  556.          REPZ MOVSB              ;Move byt, (SI)+- to (DI)+-.
  557.          STI                     ;Enable interupts.
  558.          POP   DX
  559.          MOV   AH,0EH
  560.          MSDOS           ;Select disk in (AL).
  561. L0630H:  MOV   AH,4CH
  562.          MSDOS             ;Terminate a process.
  563.          JMP   L0630H
  564. L0636H:  MOV   AH,19H
  565.          MSDOS            ;Get current disk into (AL).
  566.          INC   AL
  567.          MOV   BYTE PTR [L011DH],AL
  568.          CALL  L04ECH  
  569.          DEC   AL
  570.          MOV   DL,AL
  571.          MSDOS _SELDISK          ;Select disk in (AL).
  572.          MOV   DX,OFFSET L0528H
  573.          MOV   AX,2525H          ;Set int vector (AL) to DS:DX
  574.          MSDOS
  575.          MOV   DX,OFFSET L0530H
  576.          MOV   AX,2526H          ;Set int vector (AL) to DS:DX
  577.          MSDOS
  578.          MOV   DX,OFFSET L0538H
  579.          MOV   AX,252FH          ;Set int vector (AL) to DS:DX
  580.          MSDOS
  581.          MOV   DX,OFFSET L0201H
  582.          MOV   AX,2521H          ;Set int vector (AL) to DS:DX
  583.          MSDOS
  584.          MOV   DX,0057H
  585.          MOV   AH,31H
  586.          MSDOS               ;Terminate and stay resident.
  587. ;
  588. L0671H:  CMP   AL,' '
  589.          JZ    L068BH  
  590.          CMP   AL,LF
  591.          JZ    L068BH  
  592.          CMP   AL,'+'
  593.          JZ    L068BH  
  594.          CMP   AL,';'
  595.          JZ    L068BH  
  596.          CMP   AL,HT
  597.          JZ    L068BH  
  598.          CMP   AL,','
  599.          JZ    L068BH  
  600.          CMP   AL,'='
  601. L068BH:  RET
  602. ;
  603. L068CH:  CALL  L06C5H  
  604.          SUB   AL,41H
  605.          JC    L06BAH  
  606.          PUSH  ES
  607.          PUSH  BX
  608.          PUSH  AX
  609.          LES   BX,DWORD PTR [L0569H]        ;Load ES:BX with 32b pointer.
  610.          CMP   AL,BYTE PTR ES:[BX]+33
  611.          JNC   L06BAH  
  612.          LES   BX,DWORD PTR ES:[BX]+22      ;Load ES:BX with 32b pointer.
  613.          PUSH  BX
  614.          MOV   BL,51H
  615.          MUL   BL
  616.          POP   BX
  617.          ADD   BX,AX
  618.          TEST  WORD PTR ES:[BX]+67,4000H
  619.          JZ    L06BAH  
  620.          POP   AX
  621.          POP   BX
  622.          POP   ES
  623.          INC   AL
  624.          RET
  625. L06BAH:  MOV   DX,OFFSET L06D0H
  626.          MOV   AH,9
  627.          MSDOS            ;Display string at (DS:DX).
  628.          MOV   AH,4CH
  629.          MSDOS             ;Terminate a process.
  630. ;
  631. L06C5H:  CMP   AL,'a'
  632. L06C7H:  JC    L06CFH  
  633.          CMP   AL,'z'
  634.          JA    L06CFH  
  635.          SUB   AL,20H
  636. L06CFH:  RET
  637. L06D0H:  DB    'Invalid parameter$'
  638. L06E2H:  DB    'Incorrect DOS version',CR,LF,'$'
  639.  
  640. Code_Seg ENDS
  641.          END   L0100H  
  642.